package com.tuocent.dagv2.common.utils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class HashUtil {

    //定义全局变量,消息摘要对象
    private static MessageDigest digest;

    //构造方法私有
    private HashUtil() {
    }

    //按照MD5进行消息摘要算法(哈希计算)
    public static String digestByMD5(String source) throws NoSuchAlgorithmException {
        //基于MD5算法
        digest = MessageDigest.getInstance("MD5");
        return handler(source);
    }

    //按照SHA-1进行消息摘要算法(哈希计算)
    public static String digestBySHA1(String source) throws NoSuchAlgorithmException {
        //基于SHA-1算法
        digest = MessageDigest.getInstance("SHA-1");
        return handler(source);
    }

    //通过消息摘要对象,处理加密内容
    private static String handler(String source) {
        //更新原始数据
        digest.update(source.getBytes());
        //进行加密处理
        byte[] bytes = digest.digest();
        //将字节数组转换成十六进制
        String hash = bytesToHex(bytes);
        return hash;
    }

    //将字节数组转换为16进制字符串
    public static String bytesToHex(byte[] bytes) {
        StringBuilder ret = new StringBuilder();
        for (Byte b : bytes) {
            //将字节值转换为2位十六进制字符串
            ret.append(String.format("%02x", b));
        }
        return ret.toString();
    }
}
